"use strict";

const Service = require("egg").Service;

class BrandService extends Service {
  /**
   * 获取品牌列表
   * @param {Object} query 查询条件
   * @param {Number} page 页码
   * @param {Number} pageSize 每页数量
   * @returns {Promise<Array>} 品牌列表
   */
  async getList({ name, page, pageSize }) {
    const { Op } = this.app.Sequelize;
    const where = {};

    if (name) {
      where.name = { [Op.like]: `%${name}%` };
    }

    const result = await this.ctx.model.Brand.findAndCountAll({
      where,
      offset: (page - 1) * pageSize,
      limit: pageSize,
      order: [
        ["sort_order", "ASC"],
        ["id", "DESC"],
      ],
    });

    return {
      list: result.rows,
      total: result.count,
      page,
      pageSize,
    };
  }

  /**
   * 根据ID获取品牌
   * @param {Number} id 品牌ID
   * @returns {Promise<Object>} 品牌信息
   */
  async getById(id) {
    return this.ctx.model.Brand.findByPk(id);
  }

  /**
   * 创建品牌
   * @param {Object} data 品牌数据
   * @returns {Promise<Object>} 创建结果
   */
  async create(data) {
    return this.ctx.model.Brand.create(data);
  }

  /**
   * 更新品牌
   * @param {Number} id 品牌ID
   * @param {Object} data 品牌数据
   * @returns {Promise<Number>} 更新结果
   */
  async update(id, data) {
    return this.ctx.model.Brand.update(data, {
      where: { id },
    });
  }

  /**
   * 删除品牌
   * @param {Number} id 品牌ID
   * @returns {Promise<Number>} 删除结果
   */
  async delete(id) {
    // 检查是否有关联商品
    const hasProducts = await this.ctx.model.Product.count({
      where: { brand_id: id },
    });

    if (hasProducts > 0) {
      throw new Error("该品牌下有商品，不能删除");
    }

    return this.ctx.model.Brand.destroy({
      where: { id },
    });
  }
}

module.exports = BrandService;
